# Picom Config
# for fork with both tryone144's dual kawase blur method and anti-aliased rounded corners on glx backend
# https://github.com/ibhagwan/picom
# -------------------------------------------------------------------------------------------------------

# Backend
# ---
# Specify the backend to use: `xrender`, `glx`, or `xr_glx_hybrid`.
# GLX backend is typically much faster but depends on a sane driver.
backend = "xrender";
#experimental-backends = true;

# GLX Backend
# ---
glx-no-stencil             = true;

# GLX backend: Copy unmodified regions from front buffer instead of redrawing them all.
# My tests with nvidia-drivers show a 10% decrease in performance when the whole screen is modified,
# but a 20% increase when only 1/4 is.
# My tests on nouveau show terrible slowdown.
glx-copy-from-front        = false;

# GLX backend: Use MESA_copy_sub_buffer to do partial screen update.
# My tests on nouveau shows a 200% performance boost when only 1/4 of the screen is updated.
# May break VSync and is not available on some drivers.
# Overrides --glx-copy-from-front.
#glx-use-copysubbuffermesa = true;

# GLX backend: Avoid rebinding pixmap on window damage.
# Probably could improve performance on rapid window content changes, but is known to break things on some drivers (LLVMpipe).
# Recommended if it works.
glx-no-rebind-pixmap      = true;

# GLX backend: GLX buffer swap method we assume.
# Could be undefined (0), copy (1), exchange (2), 3-6, or buffer-age (-1).
# undefined is the slowest and the safest, and the default value.
# copy is fastest, but may fail on some drivers,
# 2-6 are gradually slower but safer (6 is still faster than 0).
# Usually, double buffer means 2, triple buffer means 3.
# buffer-age means auto-detect using GLX_EXT_buffer_age, supported by some drivers.
# Useless with --glx-use-copysubbuffermesa.
# Partially breaks --resize-damage.
# Defaults to undefined.
#glx-swap-method           = "undefined";

# Shadows
# ---
# Enabled client-side shadows on windows.
shadow               = true;
# The blur radius for shadows. (default 12)
shadow-radius        = 12;
# The left offset for shadows. (default -15)
shadow-offset-x      = -5;
# The top offset for shadows. (default -15)
shadow-offset-y      = -5;
# The translucency for shadows. (default .75)
shadow-opacity       = 0.25;

# Set if you want different colour shadows
#shadow-red          = 255.0;
#shadow-green        = 255.0;
#shadow-blue         = 255.0;

# The shadow exclude options are helpful if you have shadows enabled. Due to the way picom draws its shadows, certain applications will have visual glitches
# (most applications are fine, only apps that do weird things with xshapes or argb are affected).
# This list includes all the affected apps I found in my testing. The "! name~=''" part excludes shadows on any "Unknown" windows, this prevents a visual glitch with the XFWM alt tab switcher.
shadow-exclude       = [
  #"! name~=''",
  "name    = 'Plank'",
  "name   *= 'compton'",
  "name   *= 'picom'",
  "class_g = 'conky'",
  "class_g = 'GLava'",
  #"class_g = 'Polybar'",
  #"class_g = 'Tint2'",
  "class_g = 'Cairo-clock'",
  "class_g = 'slop'",
  "name   *= 'eyecandy.tint2'" , # Per Panel Name
  "_GTK_FRAME_EXTENTS@:c"
];

# Avoid drawing shadow on all shaped windows (see also: --detect-rounded-corners)
shadow-ignore-shaped = false;

# Opacity
# ---
inactive-opacity          = 1.0;
active-opacity            = 1.0;
frame-opacity             = 1.0;
inactive-opacity-override = false;

# Dim inactive windows. (0.0 - 1.0)
#inactive-dim       = 0.2;
# Do not let dimness adjust based on window opacity.
#inactive-dim-fixed = true;

# Rounded Corner Radius
# ---
corner-radius = 8;
rounded-corners-exclude = [
  #"! name~=''",
  #"window_type = 'normal'",
  "class_g = 'conky'",
  "class_g = 'GLava'",
  "class_g = 'Polybar'",
  "class_g = 'Tint2'"
];
round-borders = 0;
round-borders-exclude = [
    #"! name~=''",
];

# Fading
# ---
# Fade windows during opacity changes.
fading               = true;
# The time between steps in a fade in milliseconds. (default 10).
fade-delta           = 4;
# Opacity change between steps while fading in. (default 0.028).
fade-in-step         = 0.03;
# Opacity change between steps while fading out. (default 0.03).
fade-out-step        = 0.03;
# Fade windows in/out when opening/closing
no-fading-openclose  = false;

# Specify a list of conditions of windows that should not be faded.
fade-exclude         = [
    "class_g = 'slop'"
];

# Kawase Blur
# ---
#blur: {
#  method = "kawase";
#  strength = 8;
#  background = false;
#  background-frame = false;
#  background-fixed = false;
#}

#blur-background-exclude = [
#    "! name~=''",
#    "window_type = 'dock'",
#    "window_type = 'desktop'",
#    "class_g = 'Rofi'",
#    "class_g = 'slop'",
#	"_GTK_FRAME_EXTENTS@:c"
#];

# Other
# ---
# Try to detect WM windows and mark them as active.
mark-wmwin-focused     = true;
# Mark all non-WM but override-redirect windows active (e.g. menus).
mark-ovredir-focused   = true;
# Use EWMH _NET_WM_ACTIVE_WINDOW to determine which window is focused instead of using FocusIn/Out events.
# Usually more reliable but depends on a EWMH-compliant WM.
use-ewmh-active-win    = true;
# Detect rounded corners and treat them as rectangular when --shadow-ignore-shaped is on.
detect-rounded-corners = true;

# Detect _NET_WM_OPACITY on client windows, useful for window managers not passing _NET_WM_OPACITY of client windows to frame windows.
# This prevents opacity being ignored for some apps.
# For example without this enabled my xfce4-notifyd is 100% opacity no matter what.
detect-client-opacity  = true;

# Specify refresh rate of the screen.
# If not specified or 0, picom will try detecting this with X RandR extension.
refresh-rate           = 0;

# Vertical synchronization: match the refresh rate of the monitor
vsync                  = true;

# Enable DBE painting mode, intended to use with VSync to (hopefully) eliminate tearing.
# Reported to have no effect, though.
dbe                    = false;

# Limit picom to repaint at most once every 1 / refresh_rate second to boost performance.
# This should not be used with --vsync drm/opengl/opengl-oml as they essentially does --sw-opti's job already,
# unless you wish to specify a lower refresh rate than the actual value.
#sw-opti               = true;

# Unredirect all windows if a full-screen opaque window is detected, to maximize performance for full-screen windows, like games.
# Known to cause flickering when redirecting/unredirecting windows.
unredir-if-possible    = false;

# Specify a list of conditions of windows that should always be considered focused.
focus-exclude          = [ ];

# Specify a list of opacity rules, in the format `PERCENT:PATTERN`, 
# like `50:name *= "Firefox"`. picom-trans is recommended over this. 
# Note we don't make any guarantee about possible conflicts with other 
# programs that set '_NET_WM_WINDOW_OPACITY' on frame or client windows.
# example:
#    opacity-rule = [ "80:class_g = 'URxvt'" ];
#
opacity-rule = [ ];

# Use WM_TRANSIENT_FOR to group windows, and consider windows in the same group focused at the same time.
detect-transient       = true;
# Use WM_CLIENT_LEADER to group windows, and consider windows in the same group focused at the same time.
# WM_TRANSIENT_FOR has higher priority if --detect-transient is enabled, too.
detect-client-leader   = true;

# Window type settings
# ---
# fade: Fade the particular type of windows.
# shadow: Give those windows shadow
# opacity: Default opacity for the type of windows.
# focus: Whether to always consider windows of this type focused.
wintypes: {
  tooltip       = { fade = true; shadow = true; opacity = 1.00; };
  menu          = { fade = true; shadow = true; opacity = 1.00; };
  popup_menu    = { fade = true; shadow = true; opacity = 1.00; };
  dropdown_menu = { fade = true; shadow = true; opacity = 1.00; };
  utility       = { fade = true; shadow = true; opacity = 1.00; };
  dialog        = { fade = true; shadow = true; opacity = 1.00; };
  notify        = { fade = true; shadow = true; opacity = 1.00; };
  unknown       = { fade = true; shadow = true; opacity = 1.00; };
};

# XSync
# ---
# Use X Sync fence to sync clients' draw calls. Needed on nvidia-drivers with GLX backend for some users.
xrender-sync-fence     = true;
